package org.ms.nerver.governor.retry;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 超时/失败 重试机制
 * @author lry
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Retry {
	
	/**
	 * 方法调用超时设置,默认为5秒
	 * <p>
	 * 可配置依赖调用超时时间,超时时间一般设为比99.5%平均时间略高即可.当调用超时时，直接返回或执行fallback逻辑。
	 * @return
	 */
	long timeout() default 5000;
	
	/**
	 * 容错调用方法超时设置,默认为5秒
	 * <p>
	 * 可配置依赖调用超时时间,超时时间一般设为比99.5%平均时间略高即可.当调用超时时，直接返回或执行fallback逻辑。
	 * @return
	 */
	long fallbackTimeout() default 5000;
	
	/**
	 * 重试次数,默认1次(代表不重试),重试完该次数后在进行容错切换
	 * @return
	 */
	int retryTimes() default 1;
	
	/**
	 * 容错失败重试次数,默认1次(代表不重试)
	 * @return
	 */
	int fallbackRetryTimes() default 1;
	
}
